From: Joan Torres Lopez Date: Fri, 20 Feb 2026 11:39:39 +0000 (+0100) Subject: environment: Extract transition completion handling into helper function X-Git-Tag: archive/raspbian/50.5-1+rpi1^2~9^2^2~4 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=3a728abec02ac4b673114d55732b822e8a5c30b2;p=gnome-shell.git environment: Extract transition completion handling into helper function Add _setupTransitionCompletion to centralize started/stopped signal handling and cleanup logic. Both _easeActor and _easeAnimatableProperty now use this helper, reducing code duplication and ensuring consistent behavior. The signal holder is created as a child of sessionSignalHolder for proper cleanup on session shutdown. Part-of: (cherry picked from commit 3b638993b7456565ec6f60ceb20df39302313d39) --- diff --git a/js/ui/environment.js b/js/ui/environment.js index 0e0ab2f33..e94831fe9 100644 --- a/js/ui/environment.js +++ b/js/ui/environment.js @@ -81,6 +81,25 @@ function _makeEaseCallback(params, cleanup) { return {promise, callback}; } +function _setupTransitionCompletion(transition, callback, prepare) { + const signalHolder = new SignalTracker.TransientSignalHolder(sessionSignalHolder); + + const complete = finished => { + signalHolder.destroy(); + callback(finished); + }; + + if (prepare) { + if (transition.delay) + transition.connectObject('started', () => prepare(), signalHolder); + else + prepare(); + } + + transition.connectObject('stopped', (_, finished) => + complete(finished), signalHolder); +} + function _makeEasePrepareAndCleanup(duration) { if (!duration) return {prepare: null, cleanup: null}; @@ -178,19 +197,10 @@ function _easeActor(actor, params) { const [transition] = transitions; - if (prepare) { - if (transition?.delay) - transition.connectObject('started', () => prepare(), sessionSignalHolder); - else - prepare(); - } - if (transition) { - transition.connectObject('stopped', (t, finished) => { - transition.disconnectObject(sessionSignalHolder); - callback(finished); - }, sessionSignalHolder); + _setupTransitionCompletion(transition, callback, prepare); } else { + prepare?.(); callback(true); } @@ -270,17 +280,8 @@ function _easeAnimatableProperty(animatable, propName, target, params) { transition.set_to(target); - if (prepare) { - if (transition.delay) - transition.connectObject('started', () => prepare(), sessionSignalHolder); - else - prepare(); - } + _setupTransitionCompletion(transition, callback, prepare); - transition.connectObject('stopped', (t, finished) => { - transition.disconnectObject(sessionSignalHolder); - callback(finished); - }, sessionSignalHolder); return promise; }